package com.yuan.springcloud.user.utils.transform;

import com.yuan.springcloud.user.bean.dto.UserDTO;
import com.yuan.springcloud.user.bean.po.UserPO;
import com.yuan.springcloud.user.bean.vo.UserVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * User转换类，可将vo、dto、po等对象进行相互转换，性能比JSON序列化、反射等转换方式高60~200倍
 * 
 * 使用方式有以下几种：
 *  1. 通过Spring自动注入@Autowired UserTrans userTrans;
 *  2. 使用UserTrans.instance
 *  3. 可将此常量UserTrans user = Mappers.getMapper(UserTrans.class);复制到统一的转换类Transform中，然后通过Transform.user进行使用
 * 当原对象与目标对象有不同名字的属性要进行映射时，需要通过 @Mapping 注解来具体的指定属性映射 @Mapping(source = "a", target = "b")
 * @author YouYuan
 * @date 2022-04-10 08:06:48
 */
@Mapper(componentModel = "spring")
public interface UserTrans {

    UserTrans instance = Mappers.getMapper(UserTrans.class);
    
    UserVO dto2vo(UserDTO dto);

    UserDTO vo2dto(UserVO vo);

    UserPO dto2po(UserDTO dto);

    UserDTO po2dto(UserPO po);

    UserPO vo2po(UserVO vo);

    UserVO po2vo(UserPO po);

    List<UserVO> dto2vo(List<UserDTO> dtoList);

    List<UserDTO> vo2dto(List<UserVO> voList);

    List<UserPO> dto2po(List<UserDTO> dtoList);

    List<UserDTO> po2dto(List<UserPO> poList);

    List<UserPO> vo2po(List<UserVO> voList);

    List<UserVO> po2vo(List<UserPO> poList);
}
